// import { XUtils } from "../comm/XUtils";
// import Cfgs from "../configs/Cfgs";
// import { IReward } from "../configs/CfgSteakCollection";
// import LocalValues, { LocalKey } from "../data/LocalValues";
// import UserModel from "../data/UserModel";
// import HallCtrl from "./HallCtrl";

// export default class ActWheelsCtrl {
//     private static _instance: ActWheelsCtrl = null;
//     public static get instance() {
//         return this._instance || (this._instance = new ActWheelsCtrl());
//     }

//     private _data: IWheelData;

//     public init() {
//         this._data = LocalValues.getObject(LocalKey.wheelData);
//         if (!this._data) {
//             this._data = {
//                 chip: 0,
//                 rewards: [],
//                 rewardStates: [],
//                 refreshTime: 0,
//                 free: false,
//                 //======ad部分======
//                 isAdUnlock: false,
//                 isAdWheel: false,
//                 adOpenLevelCount: 0,
//                 adOpenTime: 0,
//                 adRewards: [],
//                 adRewardStates: [],
//                 adAddLevel: 0,
//                 levelPassCount: 0, // 每次
//                 adReddot: false,
//             };
//         }
//         // console.log('###ActWheelsCtrl init', this._data, this.adIsUnlock, this.adUnlockLevel);
//         if (this.adIsUnlock) {
//             if (!this.adCheckOpen(false)) {
//                 this.adCheckClose();
//             }
//             // // 如果超时或者超过持续显示关卡，data.isAd = false
//             // const bTimeOut = Date.now() - this._data.adOpenTime > this.adDurationTime;
//             // const bLevelOut = this.adRangeLevel >= this.adDurationLevel;
//             // if (bTimeOut || bLevelOut) {
//             //     this.adClose();
//             // }
//             this.countdownRefresh();
//         }
//     }
//     private _interval: any;
//     private countdownRefresh() {
//         clearInterval(this._interval);
//         let time = Math.max(0, this.nextRefreshTime - Date.now());
//         this._interval = setTimeout(() => {
//             this.randomRewards();
//         }, time);
//     }
//     //======<ad部分======
//     public adGetRewards() {
//         return this._data.adRewards;
//     }
//     public adGetRewardStates() {
//         return this._data.adRewardStates;
//     }
//     public get isAdWheel() {
//         return this._data.isAdWheel;
//     }
//     public get adUnlockLevel() {
//         return this.cfg.adUnlockLevel;
//     }
//     public get adIsUnlock() {
//         return UserModel.curLevelId >= this.adUnlockLevel;
//     }
//     // 开启等级间隔
//     public adLevelInterval() {
//         let interval = this.cfg.adInterval;
//         interval += this._data.adAddLevel;
//         return interval;
//     }
//     // 每次不参与ad转盘，增加的关卡间隔
//     public get adLevelIntervalAdd() {
//         return this.cfg.intervalAdd;
//     }
//     // 广告转盘持续显示时间
//     public get adDurationTime() {
//         return this.cfg.adTime;
//     }
//     public get adDurationLevel() {
//         return this.cfg.adLevel;
//     }
//     private adOpen() {
//         console.log('###ActWheelsCtrl adOpen');
//         this._data.isAdWheel = true;
//         this._data.isAdUnlock = true;
//         // 刷新奖池
//         this.adRandomRewards();
//         this._data.adOpenLevelCount = this._data.levelPassCount;
//         this._data.adOpenTime = Date.now();
//         this._data.adReddot = true;
//         this.save();
//     }

//     public readReddot() {
//         this._data.adReddot = false;
//         this.save();
//     }

//     public isShowReddot() : boolean{
//         if(this.isAdWheel){ 
//             return this._data.adReddot;
//         }else{
//             if(this.free){
//                 return true;
//             }else if(this.needChip <= 0){
//                 return true;
//             }
//         }
//         return false;
//     }
//     private adClose() {
//         console.log('###ActWheelsCtrl adClose');
//         this._data.isAdWheel = false;
//         // 如果所有adState为0，则增加adAddLevel
//         const allZero = this._data.adRewardStates.every(e => e == 0);
//         if (allZero) {
//             this._data.adAddLevel += this.adLevelIntervalAdd;
//         }
//         this.save();
//     }
//     private get adRangeLevel() {
//         return this._data.levelPassCount - this._data.adOpenLevelCount;
//     }
//     private adRandomRewards() {
//         // 随机5个普通，1个大奖
//         const commonRewards = this.cfg.adRewards;
//         const ultraRewards = this.cfg.adRewardsUltra;
//         let rewards = [...commonRewards].sort(() => Math.random() - 0.5).slice(0, 5);
//         rewards.push(ultraRewards[XUtils.getRandomInt(0, ultraRewards.length - 1)]);
//         this._data.adRewards = rewards;
//         this._data.adRewardStates = Array(rewards.length).fill(0);
//     }
//     private adOnGameWin() {
//         console.log('xxxj adOnGameWin');
//         if (!this.adIsUnlock) {
//             return;
//         }
//         console.log('xxxj adOnGameWin 111');
//         if (this.adCheckOpen(true)) {
//             return;
//         }
//         console.log('xxxj adOnGameWin 222');
//         // 如果超时或者到达自动关闭等级,adClose
//         if (this.adCheckClose()) {
//             return;
//         }
//     }
//     private adCheckOpen(bGameWin = false) {
//         console.log('###ActWheelsCtrl adCheckOpen', bGameWin);
//         const bUnlock = UserModel.curLevelId == this.adUnlockLevel;
//         if (bUnlock && !this.isAdWheel && !this._data.isAdUnlock) { // 如果到达开启等级，开启。
//             console.log('adOpen==>unlock');
//             this.adOpen();
//             return true;
//         }
//         if (bGameWin) {
//             this._data.levelPassCount++;
//         }
//         // 如果到达触发等级,adOpen
//         if (this.adRangeLevel > this.adLevelInterval()) {
//             console.log('adOpen==>interval');
//             this.adOpen();
//             return true;
//         } else {
//             this.save();
//         }
//         return false;
//     }
//     private adCheckClose() {
//         console.log('###ActWheelsCtrl adCheckClose');
//         // 如果超时或者超过持续显示关卡，data.isAd = false
//         const bTimeOut = Date.now() - this._data.adOpenTime > this.adDurationTime;
//         const bLevelOut = this.adRangeLevel >= this.adDurationLevel;
//         if (bTimeOut || bLevelOut) {
//             console.log('adClose==>(time|level)out', bTimeOut, bLevelOut);
//             this.adClose();
//             return true;
//         }
//         // 如果所有奖励都已获得，adClose
//         if (this.adIsAllRewardGet()) {
//             console.log('adClose==>allOne');
//             this.adClose();
//             return true;
//         }
//         return false;
//     }
//     public adIsAllRewardGet() {
//         return this._data.adRewardStates.every(e => e == 1);
//     }
//     public adGetLeftTime() {
//         return this.adDurationTime - (Date.now() - this._data.adOpenTime);
//     }
//     public adGetLeftLevel() {
//         return this.adDurationLevel - this.adRangeLevel;
//     }
//     public adGetBigProp() {
//         let prop = this.cfg.adProp;
//         let count = 0;
//         const states = this._data.adRewardStates;
//         if (states[5] == 1) {
//             return 0;
//         }
//         for (let i = 0; i < 5; i++) {
//             if (states[i] == 1) {
//                 prop += this.cfg.adPropAdd;
//                 count++;
//             }
//         }
//         if (count >= 5) {
//             prop = 1;
//         }
//         return prop;
//     }
//     public adSpin() {
//         console.log('###ActWheelsCtrl adSpin');
//         if (!this.isAdWheel) {
//             return null;
//         }
//         let bigProp = this.adGetBigProp();
//         const isBig = Math.random() < bigProp;
//         console.log('isBig', isBig);
//         let rewardIdx = 0;
//         if (isBig) {
//             rewardIdx = this._data.adRewards.length - 1;
//         } else {
//             // 从state为0的idx中随机一个
//             let idxs: number[] = [];
//             for (let i = 0; i < 5; i++) {
//                 const state = this._data.adRewardStates[i];
//                 if (state == 0) {
//                     idxs.push(i);
//                 }
//             }
//             rewardIdx = idxs[XUtils.getRandomInt(0, idxs.length - 1)];
//         }
//         console.log('rewardIdx', rewardIdx);
//         this._data.adRewardStates[rewardIdx] = 1;
//         const reward = this._data.adRewards[rewardIdx];
//         this._data.adAddLevel = 0;
//         this.save();
//         // 发放奖励
//         HallCtrl.addRewardToQueue([reward], 7, false);
//         return {
//             rewardIdx,
//             reward,
//             isBig,
//         }
//     }
//     //======ad部分>======
//     public get myChip() {
//         return this._data.chip;
//     }

//     public get spinChip() {
//         return this.cfg.chip;
//     }

//     public get needChip() {
//         return this.spinChip - this.myChip;
//     }

//     public get free() {
//         return this._data.free;
//     }

//     public get refreshTime() {
//         return this._data.refreshTime;
//     }

//     public get unlockLevel() {
//         return this.cfg.unlockLevel;
//     }
//     public get cfg() {
//         return Cfgs.PrizeWheels;
//     }

//     public getBigProp() {
//         let prop = this.cfg.prop;
//         let count = 0;
//         const states = this._data.rewardStates;
//         for (let i = 0; i < 5; i++) {
//             if (states[i] == 1) {
//                 prop += this.cfg.propAdd;
//                 count++;
//             }
//         }
//         if (count >= 5) {
//             prop = 1;
//         }
//         return prop;
//     }

//     public isUnlock() {
//         return UserModel.curLevelId >= this.unlockLevel;
//     }

//     public spin(bAd = false) {
//         console.log('###ActWheelsCtrl spin', bAd);
//         if (!bAd) {
//             if (this._data.free) {
//                 this._data.free = false;
//             } else if (this.myChip >= this.spinChip) {
//                 this._data.chip -= this.spinChip;
//             } else {
//                 return null;
//             }
//         }
//         // 先通过bigProp得到普通和big的概率，然后随机一个奖励idx
//         let bigProp = this.getBigProp();
//         console.log('bigProp', bigProp);
//         const isBig = Math.random() < bigProp;
//         console.log('isBig', isBig);
//         let rewardIdx = 0;
//         if (isBig) {
//             rewardIdx = this._data.rewards.length - 1;
//         } else {
//             // 从state为0的idx中随机一个
//             let idxs: number[] = [];
//             for (let i = 0; i < 5; i++) {
//                 const state = this._data.rewardStates[i];
//                 if (state == 0) {
//                     idxs.push(i);
//                 }
//             }
//             rewardIdx = idxs[XUtils.getRandomInt(0, idxs.length - 1)];
//         }
//         console.log('rewardIdx', rewardIdx);
//         this._data.rewardStates[rewardIdx] = 1;
//         const reward = this._data.rewards[rewardIdx];
//         if (isBig) {
//             this._data.free = true;
//             this.randomRewards();
//         }
//         this.save();
//         // 发放奖励
//         HallCtrl.addRewardToQueue([reward], 6, false);
//         return {
//             rewardIdx,
//             reward,
//             isBig,
//         }
//     }

//     public getRewards() {
//         if (!this._data.rewards.length) {
//             this.randomRewards();
//             this.save();
//         }
//         return this._data.rewards;
//     }
//     public getRewardStates() {
//         return this._data.rewardStates;
//     }

//     public randomRewards() {
//         // 随机5个普通，1个大奖
//         const commonRewards = this.cfg.getRewards(UserModel.curLevelId);
//         const ultraRewards = this.cfg.getRewardsUltra(UserModel.curLevelId);
//         let rewards = [...commonRewards].sort(() => Math.random() - 0.5).slice(0, 5);
//         rewards.push(ultraRewards[XUtils.getRandomInt(0, ultraRewards.length - 1)]);
//         this._data.rewards = rewards;
//         this._data.refreshTime = Date.now();
//         this._data.rewardStates = Array(rewards.length).fill(0);
//         this.countdownRefresh();
//     }

//     public get nextRefreshTime() {
//         return this._data.refreshTime + this.cfg.refreshTime;
//     }

//     public onGameWin() {
//         // 每次通关，给一个chip
//         if (!this.isUnlock()) {
//             return;
//         }
//         const addChip = 1;
//         this._data.chip += addChip;
//         this.adOnGameWin();
//         this.save();
//         return addChip;
//     }

//     private save() {
//         LocalValues.setObject(LocalKey.wheelData, this._data);
//     }
// }

// export interface IWheelData {
//     chip: number;
//     rewards: IReward[]; // 6个奖励，最后一个是大奖
//     rewardStates: (0 | 1)[]; // 6个奖励状态，0表示未获得，1表示已获得
//     refreshTime: number; // 刷新时间
//     free: boolean; // 是否有免费机会
//     //======ad部分======
//     isAdUnlock: boolean; // 是否解锁ad转盘
//     isAdWheel: boolean; // 是否开启ad转盘
//     adOpenLevelCount: number; // 当前开启关卡
//     adOpenTime: number; // 当前开启时间
//     adRewards: IReward[]; // 跟普通一样逻辑
//     adRewardStates: (0 | 1)[]; // 跟普通一样逻辑
//     adAddLevel: number; // 当前增加的开启关卡间隔
//     levelPassCount: number; // 活动开启后，累计的通关次数
//     adReddot: boolean;
// }